// 成绩记录类型定义 - 确保与班级管理数据结构一致
export interface Grade {
  id: string;           // 唯一标识
  term: string;         // 学期/教学周期
  examType: string;     // 考试类型
  studentId: string;    // 学生ID
  studentName: string;  // 学生姓名
  subject: string;      // 科目/课程
  score: number;        // 分数
  rank?: number;        // 排名
  remark?: string;      // 备注
  createdBy?: string;   // 创建人
  createdAt?: string;   // 创建时间
  updatedBy?: string;   // 更新人
  updatedAt?: string;   // 更新时间
  // 学院和班级相关字段 - 与班级管理保持一致
  academy: string;      // 学院名称（与班级管理中的academy字段对应）
  className: string;    // 班级名称
  classId?: string;     // 班级ID（可选，关联到班级管理的classId或id字段）
  instructor: string;   // 导员姓名
  instructorId?: string; // 导员ID
  lecturer: string;     // 讲师姓名
  lecturerId?: string;  // 讲师ID
  teachingMonth: string; // 教学月度（对应班级管理中的stage字段）
  totalStudents: number; // 班级总人数
}

// 学期选项
export const termOptions = [
  { value: '2023-fall', label: '2023-2024学年第一学期' },
  { value: '2024-spring', label: '2023-2024学年第二学期' },
  { value: '2024-fall', label: '2024-2025学年第一学期' },
];

// 考试类型选项
export const examTypeOptions = [
  { value: 'mid-term', label: '期中考试' },
  { value: 'final-term', label: '期末考试' },
  { value: 'monthly', label: '月考' },
  { value: 'weekly', label: '周测' },
  { value: 'daily', label: '日常测验' },
];

// 科目选项
export const subjectOptions = [
  { value: 'chinese', label: '语文', maxScore: 150 },
  { value: 'math', label: '数学', maxScore: 150 },
  { value: 'english', label: '英语', maxScore: 150 },
  { value: 'physics', label: '物理', maxScore: 100 },
  { value: 'chemistry', label: '化学', maxScore: 100 },
  { value: 'biology', label: '生物', maxScore: 100 },
  { value: 'history', label: '历史', maxScore: 100 },
  { value: 'geography', label: '地理', maxScore: 100 },
  { value: 'politics', label: '政治', maxScore: 100 },
];

// 学院选项
export const academyOptions = [
  { value: 'ai', label: '人工智能学院' },
  { value: 'cs', label: '计算机科学学院' },
  { value: 'ee', label: '电子工程学院' },
  { value: 'ds', label: '数据科学学院' },
];

// 班级选项
export const classOptions = [
  { value: 'class-101', label: '人工智能1班' },
  { value: 'class-102', label: '人工智能2班' },
  { value: 'class-103', label: '计算机科学1班' },
  { value: 'class-104', label: '计算机科学2班' },
  { value: 'class-201', label: '电子工程1班' },
  { value: 'class-202', label: '电子工程2班' },
];

// 导员选项
export const instructorOptions = [
  { value: 'inst-001', label: '张老师' },
  { value: 'inst-002', label: '李老师' },
  { value: 'inst-003', label: '王老师' },
];

// 讲师选项
export const lecturerOptions = [
  { value: 'lect-001', label: '刘教授' },
  { value: 'lect-002', label: '陈副教授' },
  { value: 'lect-003', label: '周讲师' },
  { value: 'lect-004', label: '吴助教' },
];

// 教学月度选项
export const teachingMonthOptions = [
  { value: '2024-01', label: '2024年1月' },
  { value: '2024-02', label: '2024年2月' },
  { value: '2024-03', label: '2024年3月' },
  { value: '2024-04', label: '2024年4月' },
  { value: '2024-05', label: '2024年5月' },
  { value: '2024-06', label: '2024年6月' },
];

// 学生选项
export const studentOptions = [
  { value: 'student-001', label: '张三', classId: 'class-101', academy: 'ai' },
  { value: 'student-002', label: '李四', classId: 'class-101', academy: 'ai' },
  { value: 'student-003', label: '王五', classId: 'class-102', academy: 'ai' },
  { value: 'student-004', label: '赵六', classId: 'class-102', academy: 'ai' },
  { value: 'student-005', label: '陈七', classId: 'class-103', academy: 'cs' },
  { value: 'student-006', label: '刘八', classId: 'class-103', academy: 'cs' },
  { value: 'student-007', label: '周九', classId: 'class-104', academy: 'cs' },
  { value: 'student-008', label: '吴十', classId: 'class-104', academy: 'cs' },
  { value: 'student-009', label: '郑十一', classId: 'class-201', academy: 'ee' },
  { value: 'student-010', label: '王十二', classId: 'class-201', academy: 'ee' },
  { value: 'student-011', label: '冯十三', classId: 'class-202', academy: 'ee' },
  { value: 'student-012', label: '陈十四', classId: 'class-202', academy: 'ee' },
];

// 获取科目的满分值
const getSubjectMaxScore = (subjectId: string): number => {
  const subject = subjectOptions.find(s => s.value === subjectId);
  return subject?.maxScore || 100;
};

// 获取科目名称
const getSubjectName = (subjectId: string): string => {
  const subject = subjectOptions.find(s => s.value === subjectId);
  return subject?.label || '未知科目';
};

// 生成初始成绩数据
const generateInitialGrades = (): Grade[] => {
  const grades: Grade[] = [];
  const currentTerm = termOptions[1].label; // 使用当前学期的显示名称
  
  // 为每个学生生成不同科目的成绩
  studentOptions.forEach(student => {
    subjectOptions.forEach(subject => {
      // 生成随机分数，基于不同科目的满分
      const maxScore = subject.maxScore;
      // 生成一个80-95分之间的随机分数，让初始数据看起来合理
      const randomScore = Math.floor(Math.random() * 16) + 80;
      
      // 找到学生对应的班级信息
      const classInfo = classOptions.find(cls => cls.value === student.classId);
      // 随机选择导员和讲师
      const randomInstructor = instructorOptions[Math.floor(Math.random() * instructorOptions.length)];
      const randomLecturer = lecturerOptions[Math.floor(Math.random() * lecturerOptions.length)];
      // 随机选择教学月度
      const randomMonth = teachingMonthOptions[Math.floor(Math.random() * teachingMonthOptions.length)];
      // 找到学院信息
      const academyInfo = academyOptions.find(aca => aca.value === student.academy);
      
      grades.push({
        id: `grade-${currentTerm}-${examTypeOptions[1].value}-${student.value}-${subject.value}`,
        term: currentTerm,
        examType: examTypeOptions[1].label, // 使用考试类型的显示名称
        studentId: student.value,
        studentName: student.label,
        subject: subject.label, // 使用科目的显示名称
        score: randomScore,
        remark: randomScore >= 90 ? '优秀' : randomScore >= 80 ? '良好' : '一般',
        createdBy: 'system',
        createdAt: new Date().toISOString(),
        updatedBy: 'system',
        updatedAt: new Date().toISOString(),
        // 新增字段
        academy: academyInfo?.label || '未知学院',
        className: classInfo?.label || '未知班级',
        instructor: randomInstructor.label,
        lecturer: randomLecturer.label,
        teachingMonth: randomMonth.label,
        totalStudents: 40, // 假设每个班级40人
      });
    });
  });
  
  return grades;
};

// 初始成绩数据 (清空数据)
export const initialGrades: Grade[] = [];

// 验证成绩数据
const validateGrade = (grade: Omit<Grade, 'id'>): { isValid: boolean; errors: string[] } => {
  const errors: string[] = [];
  
  if (!grade.term) {
    errors.push('教学周期不能为空');
  }
  
  if (!grade.examType) {
    errors.push('类型不能为空');
  }
  
  if (!grade.studentId) {
    errors.push('学生不能为空');
  }
  
  if (!grade.subject) {
    errors.push('课程不能为空');
  }
  
  if (!grade.academy) {
    errors.push('学院不能为空');
  }
  
  if (!grade.className) {
    errors.push('班级不能为空');
  }
  
  if (!grade.instructor) {
    errors.push('导员不能为空');
  }
  
  if (!grade.lecturer) {
    errors.push('讲师不能为空');
  }
  
  if (!grade.teachingMonth) {
    errors.push('教学月度不能为空');
  }
  
  if (grade.score === undefined || grade.score === null) {
    errors.push('分数不能为空');
  } else if (grade.score < 0 || grade.score > 100) {
    errors.push('分数必须在0-100之间');
  }
  
  if (grade.totalStudents <= 0) {
    errors.push('总人数必须大于0');
  }
  
  return {
    isValid: errors.length === 0,
    errors,
  };
};

// 获取成绩等级
const getScoreLevel = (score: number, subjectId: string): string => {
  const maxScore = getSubjectMaxScore(subjectId);
  const percentage = score / maxScore * 100;
  
  if (percentage >= 90) return 'A';
  if (percentage >= 80) return 'B';
  if (percentage >= 70) return 'C';
  if (percentage >= 60) return 'D';
  return 'F';
};

// 获取成绩等级描述
const getScoreLevelText = (score: number, subjectId: string): string => {
  const maxScore = getSubjectMaxScore(subjectId);
  const percentage = score / maxScore * 100;
  
  if (percentage >= 90) return '优秀';
  if (percentage >= 80) return '良好';
  if (percentage >= 70) return '中等';
  if (percentage >= 60) return '及格';
  return '不及格';
};

// 导出验证函数和辅助函数
export { validateGrade, getScoreLevel, getScoreLevelText, getSubjectMaxScore, getSubjectName };